home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 3 / The Arsenal Files 3.iso / gen_prog / appdemo.exe / DEMOVIEW.APP < prev    next >
Text File  |  1994-11-07  |  5KB  |  172 lines

  1. /***********   This program displays the DEMOVIEW.TXT file   *********/
  2.  
  3. #include "FILEIO.APP"  // Include File I/O library functions
  4. #include "API.APP"     // Include functions for Application Programming Interface
  5. #include "STRING.APP"  // Include String function library
  6. #include "MAINLIB.APP" // MAINLIB.APP must always be the last #include
  7.  
  8. .STACKSIZE 2000
  9. .STRINGHEAPSIZE 5000
  10.  
  11. // Declare Global variables
  12. int  DemoViewFile;         // File Handle for DEMOVIEW.TXT
  13. int  Page;                 // Current Page number
  14. long PageAddress[100];     // Address of where page starts
  15. int  NumberOfPages;        // Total number of pages
  16.  
  17.  
  18. int Main()
  19. {
  20.  string Time;
  21.  string PreviousTime;
  22.  string FilePathAndName;
  23.  string Line;
  24.  
  25.  // Open the file to view
  26.  DemoViewFile = Open("DEMOVIEW.TXT", READ);
  27.  if(!DemoViewFile) { cout << "Could not open DEMOVIEW.TXT\n"; return 0; }
  28.  
  29.  // Find all the page positions
  30.  NumberOfPages = 0;
  31.  // With A++ Underscores are used to give a register a name as shown below
  32.  EDX_FilePosition = 0;
  33.  while(!EOF(DemoViewFile))
  34.  {
  35.   EDX_FilePosition++;
  36.   AL = GetByte(DemoViewFile);
  37.   if(AL == 12)
  38.   {
  39.    if(NumberOfPages >= 100) { cout << "Too many pages\n"; return 0; }
  40.    PageAddress[NumberOfPages] = EDX_FilePosition;
  41.    NumberOfPages++;
  42.   }
  43.  }
  44.  Stream.Err[DemoViewFile] = 0;     // Reset the Error (EOF) flag
  45.  SetFilePosition(DemoViewFile, 0); // Move file pointer back to the start
  46.  NumberOfPages--;                  // Last page is blank
  47.  
  48.  // Initialise the screen
  49.  Vdu.BackgroundColor = BLUE;
  50.  Vdu.ForegroundColor = WHITE;
  51.  ClearScreen();
  52.  CursorOff();
  53.  
  54.  // Draw the Box
  55.  DrawBox(0,1,79,23);
  56.  
  57.  // Display the top Line
  58.  Vdu.BackgroundColor = WHITE;
  59.  Vdu.Row = 0; Vdu.Column = 0; ClearLine();
  60.  Vdu.ForegroundColor = RED; Vdu.Column = 2;  cout << "Q"; Vdu.ForegroundColor = BLACK; cout << "uit";
  61.  Vdu.ForegroundColor = RED; Vdu.Column = 9;  cout << "N"; Vdu.ForegroundColor = BLACK; cout << "extPage"; 
  62.  Vdu.ForegroundColor = RED; Vdu.Column = 20; cout << "P"; Vdu.ForegroundColor = BLACK; cout << "reviousPage";
  63.  Vdu.Column = 59; cout << GetDate() << "   " << GetTime() << "  ";
  64.  
  65.  // Display the Program Name
  66.  Vdu.BackgroundColor = WHITE;
  67.  Vdu.ForegroundColor = BLUE;
  68.  FilePathAndName = " " + GetCurrentDrive() + GetCurrentDirectory();
  69.  SI_Len = StringLength(FilePathAndName);
  70.  if(FilePathAndName[SI_Len-1] != '\') FilePathAndName = FilePathAndName + "\\";  // "\"
  71.  FilePathAndName = FilePathAndName + "DEMOVIEW.TXT" + " ";
  72.  DX = 40 - StringLength(FilePathAndName) / 2; // Number of spaces to centre text
  73.  Vdu.Row = 1; Vdu.Column = DL; cout << FilePathAndName;
  74.  
  75.  // Display the bottom Line
  76.  Vdu.BackgroundColor = CYAN;
  77.  Vdu.ForegroundColor = BRILLIANTWHITE;
  78.  Vdu.Column = 0; Vdu.Row = 24;
  79.  ClearLine();
  80.  
  81.  // Initialise the mouse
  82.  Vdu.Column = 0; Vdu.Row = 24;
  83.  cout << "Initialising the mouse";
  84.  InitialiseMouse();
  85.  Vdu.Column = 0;
  86.  cout << "Please select a Red Key from the Menu, or PgDn, PgUp or ESC";
  87.  
  88.  // Set up the View Port
  89.  Vdu.MinRow = 2;
  90.  Vdu.MinCol = 1;
  91.  Vdu.MaxRow = 22;
  92.  Vdu.MaxCol = 78;
  93.  
  94.  // Display the first page
  95.  Page = 0;
  96.  DisplayPage(); 
  97.  
  98.  while(AX == AX)
  99.  {
  100.   while(!AKeyIsWaiting())
  101.   { 
  102.    // Only display the time when it changes
  103.    Time = GetTime();
  104.    if(Time != PreviousTime)
  105.    {
  106.     Vdu.ForegroundColor = BLACK;
  107.     Vdu.BackgroundColor = WHITE;
  108.     Vdu.Column = 59; Vdu.Row = 0;
  109.     Vdu.MinRow = 0; // Temporarily let cout work outside its view port
  110.     cout << GetDate() << "   " << Time << "  ";
  111.     PreviousTime = Time;
  112.     Vdu.MinRow = 2;
  113.    }
  114.    if(Mouse.Active)
  115.    {
  116.     UpdateMouseVariables();
  117.     if(Mouse.LeftButtonDown)
  118.     {
  119.      if(Mouse.Row == 0) 
  120.      {
  121.       // On the top Line
  122.       CL = Mouse.Col;
  123.       if     (CL >= 2  && CL <= 5)   EndProgram();
  124.       else if(CL >= 9  && CL <= 16)  { Page++; DisplayPage(); }
  125.       else if(CL >= 20 && CL <= 31)  { Page--; DisplayPage(); }
  126.      }    
  127.     }
  128.     while(Mouse.LeftButtonDown) UpdateMouseVariables();
  129.    }
  130.   }
  131.   
  132.   // Read the extended character
  133.   AH = 0; INT 16h;  // Example of using Assembler to Call BIOS
  134.                     // Returns ASCII character in AL and Scan Code in AH
  135.   if     (AL == 0 && AH == 51h)   { Page++; DisplayPage(); }  // If a Scan Code == 51h
  136.   else if(AL == 0 && AH == 49h)   { Page--; DisplayPage(); }  // If a Scan Code == 49h
  137.   else if(AL == 'N' || AL == 'n') { Page++; DisplayPage(); } 
  138.   else if(AL == 'P' || AL == 'p') { Page--; DisplayPage(); }  
  139.   else if(AL == 27 || AL == 'Q' || AL == 'q') EndProgram();
  140.  }
  141.  return 0;
  142. }
  143.  
  144.  
  145. void EndProgram()
  146. {
  147.  Close(DemoViewFile);
  148.  End(0);
  149. }
  150.  
  151.  
  152. void DisplayPage()
  153. {
  154.  string Line;
  155.  
  156.  if(Page < 0) { Page = 0; return; }
  157.  if(Page >= NumberOfPages) { Page = NumberOfPages - 1; return; }
  158.  SetFilePosition(DemoViewFile, PageAddress[Page]);
  159.  Vdu.Row = 2; Vdu.Column = 1;
  160.  Vdu.BackgroundColor = BLUE;
  161.  Vdu.ForegroundColor = YELLOW;
  162.  ClearScreen();
  163.  DemoViewFile >> Line;   // Read the first line
  164.  while(Line[0] != 12 && !EOF(DemoViewFile)) // while not FF (FormFeed) and not at end of file
  165.  {
  166.   cout << "\n" << Line;  // Put CR at start so that can scroll to bottom line
  167.   DemoViewFile >> Line;  // Read the next line
  168.  }
  169. }
  170.  
  171.  
  172.